package main

import "fmt"

// 返回匿名函数的方法
func getAnonymousFunc() func() {
	//函数局部变量,因为会产生闭包情况，因此此变量是存储在堆空间，而非传统变量的栈空间
	//这也是为什么函数执行完毕后，栈被销毁，变量i依旧存在并且可以累加的原因
	i := 0
	f := func() {
		i++
		fmt.Println(i)
	}
	return f
}

func main() {
	//此处产生闭包，函数中的i不会被销毁
	f := getAnonymousFunc()
	f()
	f()
	//输出结果1 2，因为有闭包现象
}
